(0) Obligation:
Runtime Complexity Relative TRS:
The TRS R consists of the following rules:
prefix(Cons(x', xs'), Cons(x, xs)) → and(!EQ(x', x), prefix(xs', xs))
domatch(Cons(x, xs), Nil, n) → Nil
domatch(Nil, Nil, n) → Cons(n, Nil)
prefix(Cons(x, xs), Nil) → False
prefix(Nil, cs) → True
domatch(patcs, Cons(x, xs), n) → domatch[Ite](prefix(patcs, Cons(x, xs)), patcs, Cons(x, xs), n)
eqNatList(Cons(x, xs), Cons(y, ys)) → eqNatList[Ite](!EQ(x, y), y, ys, x, xs)
eqNatList(Cons(x, xs), Nil) → False
eqNatList(Nil, Cons(y, ys)) → False
eqNatList(Nil, Nil) → True
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False
strmatch(patstr, str) → domatch(patstr, str, Nil)
The (relative) TRS S consists of the following rules:
and(False, False) → False
and(True, False) → False
and(False, True) → False
and(True, True) → True
!EQ(S(x), S(y)) → !EQ(x, y)
!EQ(0, S(y)) → False
!EQ(S(x), 0) → False
!EQ(0, 0) → True
domatch[Ite](False, patcs, Cons(x, xs), n) → domatch(patcs, xs, Cons(n, Cons(Nil, Nil)))
domatch[Ite](True, patcs, Cons(x, xs), n) → Cons(n, domatch(patcs, xs, Cons(n, Cons(Nil, Nil))))
eqNatList[Ite](False, y, ys, x, xs) → False
eqNatList[Ite](True, y, ys, x, xs) → eqNatList(xs, ys)
Rewrite Strategy: INNERMOST
(1) RenamingProof (EQUIVALENT transformation)
Renamed function symbols to avoid clashes with predefined symbol.
(2) Obligation:
Runtime Complexity Relative TRS:
The TRS R consists of the following rules:
prefix(Cons(x', xs'), Cons(x, xs)) → and(!EQ(x', x), prefix(xs', xs))
domatch(Cons(x, xs), Nil, n) → Nil
domatch(Nil, Nil, n) → Cons(n, Nil)
prefix(Cons(x, xs), Nil) → False
prefix(Nil, cs) → True
domatch(patcs, Cons(x, xs), n) → domatch[Ite](prefix(patcs, Cons(x, xs)), patcs, Cons(x, xs), n)
eqNatList(Cons(x, xs), Cons(y, ys)) → eqNatList[Ite](!EQ(x, y), y, ys, x, xs)
eqNatList(Cons(x, xs), Nil) → False
eqNatList(Nil, Cons(y, ys)) → False
eqNatList(Nil, Nil) → True
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False
strmatch(patstr, str) → domatch(patstr, str, Nil)
The (relative) TRS S consists of the following rules:
and(False, False) → False
and(True, False) → False
and(False, True) → False
and(True, True) → True
!EQ(S(x), S(y)) → !EQ(x, y)
!EQ(0', S(y)) → False
!EQ(S(x), 0') → False
!EQ(0', 0') → True
domatch[Ite](False, patcs, Cons(x, xs), n) → domatch(patcs, xs, Cons(n, Cons(Nil, Nil)))
domatch[Ite](True, patcs, Cons(x, xs), n) → Cons(n, domatch(patcs, xs, Cons(n, Cons(Nil, Nil))))
eqNatList[Ite](False, y, ys, x, xs) → False
eqNatList[Ite](True, y, ys, x, xs) → eqNatList(xs, ys)
Rewrite Strategy: INNERMOST
(3) SlicingProof (LOWER BOUND(ID) transformation)
Sliced the following arguments:
eqNatList[Ite]/1
eqNatList[Ite]/3
(4) Obligation:
Runtime Complexity Relative TRS:
The TRS R consists of the following rules:
prefix(Cons(x', xs'), Cons(x, xs)) → and(!EQ(x', x), prefix(xs', xs))
domatch(Cons(x, xs), Nil, n) → Nil
domatch(Nil, Nil, n) → Cons(n, Nil)
prefix(Cons(x, xs), Nil) → False
prefix(Nil, cs) → True
domatch(patcs, Cons(x, xs), n) → domatch[Ite](prefix(patcs, Cons(x, xs)), patcs, Cons(x, xs), n)
eqNatList(Cons(x, xs), Cons(y, ys)) → eqNatList[Ite](!EQ(x, y), ys, xs)
eqNatList(Cons(x, xs), Nil) → False
eqNatList(Nil, Cons(y, ys)) → False
eqNatList(Nil, Nil) → True
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False
strmatch(patstr, str) → domatch(patstr, str, Nil)
The (relative) TRS S consists of the following rules:
and(False, False) → False
and(True, False) → False
and(False, True) → False
and(True, True) → True
!EQ(S(x), S(y)) → !EQ(x, y)
!EQ(0', S(y)) → False
!EQ(S(x), 0') → False
!EQ(0', 0') → True
domatch[Ite](False, patcs, Cons(x, xs), n) → domatch(patcs, xs, Cons(n, Cons(Nil, Nil)))
domatch[Ite](True, patcs, Cons(x, xs), n) → Cons(n, domatch(patcs, xs, Cons(n, Cons(Nil, Nil))))
eqNatList[Ite](False, ys, xs) → False
eqNatList[Ite](True, ys, xs) → eqNatList(xs, ys)
Rewrite Strategy: INNERMOST
(5) TypeInferenceProof (BOTH BOUNDS(ID, ID) transformation)
Infered types.
(6) Obligation:
Innermost TRS:
Rules:
prefix(Cons(x', xs'), Cons(x, xs)) → and(!EQ(x', x), prefix(xs', xs))
domatch(Cons(x, xs), Nil, n) → Nil
domatch(Nil, Nil, n) → Cons(n, Nil)
prefix(Cons(x, xs), Nil) → False
prefix(Nil, cs) → True
domatch(patcs, Cons(x, xs), n) → domatch[Ite](prefix(patcs, Cons(x, xs)), patcs, Cons(x, xs), n)
eqNatList(Cons(x, xs), Cons(y, ys)) → eqNatList[Ite](!EQ(x, y), ys, xs)
eqNatList(Cons(x, xs), Nil) → False
eqNatList(Nil, Cons(y, ys)) → False
eqNatList(Nil, Nil) → True
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False
strmatch(patstr, str) → domatch(patstr, str, Nil)
and(False, False) → False
and(True, False) → False
and(False, True) → False
and(True, True) → True
!EQ(S(x), S(y)) → !EQ(x, y)
!EQ(0', S(y)) → False
!EQ(S(x), 0') → False
!EQ(0', 0') → True
domatch[Ite](False, patcs, Cons(x, xs), n) → domatch(patcs, xs, Cons(n, Cons(Nil, Nil)))
domatch[Ite](True, patcs, Cons(x, xs), n) → Cons(n, domatch(patcs, xs, Cons(n, Cons(Nil, Nil))))
eqNatList[Ite](False, ys, xs) → False
eqNatList[Ite](True, ys, xs) → eqNatList(xs, ys)
Types:
prefix :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
Cons :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
and :: False:True → False:True → False:True
!EQ :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
domatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
Nil :: Cons:Nil:S:0'
False :: False:True
True :: False:True
domatch[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
eqNatList :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
eqNatList[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
notEmpty :: Cons:Nil:S:0' → False:True
strmatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
S :: Cons:Nil:S:0' → Cons:Nil:S:0'
0' :: Cons:Nil:S:0'
hole_False:True1_0 :: False:True
hole_Cons:Nil:S:0'2_0 :: Cons:Nil:S:0'
gen_Cons:Nil:S:0'3_0 :: Nat → Cons:Nil:S:0'
(7) OrderProof (LOWER BOUND(ID) transformation)
Heuristically decided to analyse the following defined symbols:
prefix,
!EQ,
domatch,
eqNatListThey will be analysed ascendingly in the following order:
!EQ < prefix
prefix < domatch
!EQ < eqNatList
(8) Obligation:
Innermost TRS:
Rules:
prefix(
Cons(
x',
xs'),
Cons(
x,
xs)) →
and(
!EQ(
x',
x),
prefix(
xs',
xs))
domatch(
Cons(
x,
xs),
Nil,
n) →
Nildomatch(
Nil,
Nil,
n) →
Cons(
n,
Nil)
prefix(
Cons(
x,
xs),
Nil) →
Falseprefix(
Nil,
cs) →
Truedomatch(
patcs,
Cons(
x,
xs),
n) →
domatch[Ite](
prefix(
patcs,
Cons(
x,
xs)),
patcs,
Cons(
x,
xs),
n)
eqNatList(
Cons(
x,
xs),
Cons(
y,
ys)) →
eqNatList[Ite](
!EQ(
x,
y),
ys,
xs)
eqNatList(
Cons(
x,
xs),
Nil) →
FalseeqNatList(
Nil,
Cons(
y,
ys)) →
FalseeqNatList(
Nil,
Nil) →
TruenotEmpty(
Cons(
x,
xs)) →
TruenotEmpty(
Nil) →
Falsestrmatch(
patstr,
str) →
domatch(
patstr,
str,
Nil)
and(
False,
False) →
Falseand(
True,
False) →
Falseand(
False,
True) →
Falseand(
True,
True) →
True!EQ(
S(
x),
S(
y)) →
!EQ(
x,
y)
!EQ(
0',
S(
y)) →
False!EQ(
S(
x),
0') →
False!EQ(
0',
0') →
Truedomatch[Ite](
False,
patcs,
Cons(
x,
xs),
n) →
domatch(
patcs,
xs,
Cons(
n,
Cons(
Nil,
Nil)))
domatch[Ite](
True,
patcs,
Cons(
x,
xs),
n) →
Cons(
n,
domatch(
patcs,
xs,
Cons(
n,
Cons(
Nil,
Nil))))
eqNatList[Ite](
False,
ys,
xs) →
FalseeqNatList[Ite](
True,
ys,
xs) →
eqNatList(
xs,
ys)
Types:
prefix :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
Cons :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
and :: False:True → False:True → False:True
!EQ :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
domatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
Nil :: Cons:Nil:S:0'
False :: False:True
True :: False:True
domatch[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
eqNatList :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
eqNatList[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
notEmpty :: Cons:Nil:S:0' → False:True
strmatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
S :: Cons:Nil:S:0' → Cons:Nil:S:0'
0' :: Cons:Nil:S:0'
hole_False:True1_0 :: False:True
hole_Cons:Nil:S:0'2_0 :: Cons:Nil:S:0'
gen_Cons:Nil:S:0'3_0 :: Nat → Cons:Nil:S:0'
Generator Equations:
gen_Cons:Nil:S:0'3_0(0) ⇔ Nil
gen_Cons:Nil:S:0'3_0(+(x, 1)) ⇔ Cons(Nil, gen_Cons:Nil:S:0'3_0(x))
The following defined symbols remain to be analysed:
!EQ, prefix, domatch, eqNatList
They will be analysed ascendingly in the following order:
!EQ < prefix
prefix < domatch
!EQ < eqNatList
(9) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol !EQ.
(10) Obligation:
Innermost TRS:
Rules:
prefix(
Cons(
x',
xs'),
Cons(
x,
xs)) →
and(
!EQ(
x',
x),
prefix(
xs',
xs))
domatch(
Cons(
x,
xs),
Nil,
n) →
Nildomatch(
Nil,
Nil,
n) →
Cons(
n,
Nil)
prefix(
Cons(
x,
xs),
Nil) →
Falseprefix(
Nil,
cs) →
Truedomatch(
patcs,
Cons(
x,
xs),
n) →
domatch[Ite](
prefix(
patcs,
Cons(
x,
xs)),
patcs,
Cons(
x,
xs),
n)
eqNatList(
Cons(
x,
xs),
Cons(
y,
ys)) →
eqNatList[Ite](
!EQ(
x,
y),
ys,
xs)
eqNatList(
Cons(
x,
xs),
Nil) →
FalseeqNatList(
Nil,
Cons(
y,
ys)) →
FalseeqNatList(
Nil,
Nil) →
TruenotEmpty(
Cons(
x,
xs)) →
TruenotEmpty(
Nil) →
Falsestrmatch(
patstr,
str) →
domatch(
patstr,
str,
Nil)
and(
False,
False) →
Falseand(
True,
False) →
Falseand(
False,
True) →
Falseand(
True,
True) →
True!EQ(
S(
x),
S(
y)) →
!EQ(
x,
y)
!EQ(
0',
S(
y)) →
False!EQ(
S(
x),
0') →
False!EQ(
0',
0') →
Truedomatch[Ite](
False,
patcs,
Cons(
x,
xs),
n) →
domatch(
patcs,
xs,
Cons(
n,
Cons(
Nil,
Nil)))
domatch[Ite](
True,
patcs,
Cons(
x,
xs),
n) →
Cons(
n,
domatch(
patcs,
xs,
Cons(
n,
Cons(
Nil,
Nil))))
eqNatList[Ite](
False,
ys,
xs) →
FalseeqNatList[Ite](
True,
ys,
xs) →
eqNatList(
xs,
ys)
Types:
prefix :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
Cons :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
and :: False:True → False:True → False:True
!EQ :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
domatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
Nil :: Cons:Nil:S:0'
False :: False:True
True :: False:True
domatch[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
eqNatList :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
eqNatList[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
notEmpty :: Cons:Nil:S:0' → False:True
strmatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
S :: Cons:Nil:S:0' → Cons:Nil:S:0'
0' :: Cons:Nil:S:0'
hole_False:True1_0 :: False:True
hole_Cons:Nil:S:0'2_0 :: Cons:Nil:S:0'
gen_Cons:Nil:S:0'3_0 :: Nat → Cons:Nil:S:0'
Generator Equations:
gen_Cons:Nil:S:0'3_0(0) ⇔ Nil
gen_Cons:Nil:S:0'3_0(+(x, 1)) ⇔ Cons(Nil, gen_Cons:Nil:S:0'3_0(x))
The following defined symbols remain to be analysed:
prefix, domatch, eqNatList
They will be analysed ascendingly in the following order:
prefix < domatch
(11) RewriteLemmaProof (LOWER BOUND(ID) transformation)
Proved the following rewrite lemma:
prefix(
gen_Cons:Nil:S:0'3_0(
+(
1,
n28_0)),
gen_Cons:Nil:S:0'3_0(
+(
1,
n28_0))) →
*4_0, rt ∈ Ω(n28
0)
Induction Base:
prefix(gen_Cons:Nil:S:0'3_0(+(1, 0)), gen_Cons:Nil:S:0'3_0(+(1, 0)))
Induction Step:
prefix(gen_Cons:Nil:S:0'3_0(+(1, +(n28_0, 1))), gen_Cons:Nil:S:0'3_0(+(1, +(n28_0, 1)))) →RΩ(1)
and(!EQ(Nil, Nil), prefix(gen_Cons:Nil:S:0'3_0(+(1, n28_0)), gen_Cons:Nil:S:0'3_0(+(1, n28_0)))) →IH
and(!EQ(Nil, Nil), *4_0)
We have rt ∈ Ω(n1) and sz ∈ O(n). Thus, we have ircR ∈ Ω(n).
(12) Complex Obligation (BEST)
(13) Obligation:
Innermost TRS:
Rules:
prefix(
Cons(
x',
xs'),
Cons(
x,
xs)) →
and(
!EQ(
x',
x),
prefix(
xs',
xs))
domatch(
Cons(
x,
xs),
Nil,
n) →
Nildomatch(
Nil,
Nil,
n) →
Cons(
n,
Nil)
prefix(
Cons(
x,
xs),
Nil) →
Falseprefix(
Nil,
cs) →
Truedomatch(
patcs,
Cons(
x,
xs),
n) →
domatch[Ite](
prefix(
patcs,
Cons(
x,
xs)),
patcs,
Cons(
x,
xs),
n)
eqNatList(
Cons(
x,
xs),
Cons(
y,
ys)) →
eqNatList[Ite](
!EQ(
x,
y),
ys,
xs)
eqNatList(
Cons(
x,
xs),
Nil) →
FalseeqNatList(
Nil,
Cons(
y,
ys)) →
FalseeqNatList(
Nil,
Nil) →
TruenotEmpty(
Cons(
x,
xs)) →
TruenotEmpty(
Nil) →
Falsestrmatch(
patstr,
str) →
domatch(
patstr,
str,
Nil)
and(
False,
False) →
Falseand(
True,
False) →
Falseand(
False,
True) →
Falseand(
True,
True) →
True!EQ(
S(
x),
S(
y)) →
!EQ(
x,
y)
!EQ(
0',
S(
y)) →
False!EQ(
S(
x),
0') →
False!EQ(
0',
0') →
Truedomatch[Ite](
False,
patcs,
Cons(
x,
xs),
n) →
domatch(
patcs,
xs,
Cons(
n,
Cons(
Nil,
Nil)))
domatch[Ite](
True,
patcs,
Cons(
x,
xs),
n) →
Cons(
n,
domatch(
patcs,
xs,
Cons(
n,
Cons(
Nil,
Nil))))
eqNatList[Ite](
False,
ys,
xs) →
FalseeqNatList[Ite](
True,
ys,
xs) →
eqNatList(
xs,
ys)
Types:
prefix :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
Cons :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
and :: False:True → False:True → False:True
!EQ :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
domatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
Nil :: Cons:Nil:S:0'
False :: False:True
True :: False:True
domatch[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
eqNatList :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
eqNatList[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
notEmpty :: Cons:Nil:S:0' → False:True
strmatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
S :: Cons:Nil:S:0' → Cons:Nil:S:0'
0' :: Cons:Nil:S:0'
hole_False:True1_0 :: False:True
hole_Cons:Nil:S:0'2_0 :: Cons:Nil:S:0'
gen_Cons:Nil:S:0'3_0 :: Nat → Cons:Nil:S:0'
Lemmas:
prefix(gen_Cons:Nil:S:0'3_0(+(1, n28_0)), gen_Cons:Nil:S:0'3_0(+(1, n28_0))) → *4_0, rt ∈ Ω(n280)
Generator Equations:
gen_Cons:Nil:S:0'3_0(0) ⇔ Nil
gen_Cons:Nil:S:0'3_0(+(x, 1)) ⇔ Cons(Nil, gen_Cons:Nil:S:0'3_0(x))
The following defined symbols remain to be analysed:
domatch, eqNatList
(14) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol domatch.
(15) Obligation:
Innermost TRS:
Rules:
prefix(
Cons(
x',
xs'),
Cons(
x,
xs)) →
and(
!EQ(
x',
x),
prefix(
xs',
xs))
domatch(
Cons(
x,
xs),
Nil,
n) →
Nildomatch(
Nil,
Nil,
n) →
Cons(
n,
Nil)
prefix(
Cons(
x,
xs),
Nil) →
Falseprefix(
Nil,
cs) →
Truedomatch(
patcs,
Cons(
x,
xs),
n) →
domatch[Ite](
prefix(
patcs,
Cons(
x,
xs)),
patcs,
Cons(
x,
xs),
n)
eqNatList(
Cons(
x,
xs),
Cons(
y,
ys)) →
eqNatList[Ite](
!EQ(
x,
y),
ys,
xs)
eqNatList(
Cons(
x,
xs),
Nil) →
FalseeqNatList(
Nil,
Cons(
y,
ys)) →
FalseeqNatList(
Nil,
Nil) →
TruenotEmpty(
Cons(
x,
xs)) →
TruenotEmpty(
Nil) →
Falsestrmatch(
patstr,
str) →
domatch(
patstr,
str,
Nil)
and(
False,
False) →
Falseand(
True,
False) →
Falseand(
False,
True) →
Falseand(
True,
True) →
True!EQ(
S(
x),
S(
y)) →
!EQ(
x,
y)
!EQ(
0',
S(
y)) →
False!EQ(
S(
x),
0') →
False!EQ(
0',
0') →
Truedomatch[Ite](
False,
patcs,
Cons(
x,
xs),
n) →
domatch(
patcs,
xs,
Cons(
n,
Cons(
Nil,
Nil)))
domatch[Ite](
True,
patcs,
Cons(
x,
xs),
n) →
Cons(
n,
domatch(
patcs,
xs,
Cons(
n,
Cons(
Nil,
Nil))))
eqNatList[Ite](
False,
ys,
xs) →
FalseeqNatList[Ite](
True,
ys,
xs) →
eqNatList(
xs,
ys)
Types:
prefix :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
Cons :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
and :: False:True → False:True → False:True
!EQ :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
domatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
Nil :: Cons:Nil:S:0'
False :: False:True
True :: False:True
domatch[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
eqNatList :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
eqNatList[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
notEmpty :: Cons:Nil:S:0' → False:True
strmatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
S :: Cons:Nil:S:0' → Cons:Nil:S:0'
0' :: Cons:Nil:S:0'
hole_False:True1_0 :: False:True
hole_Cons:Nil:S:0'2_0 :: Cons:Nil:S:0'
gen_Cons:Nil:S:0'3_0 :: Nat → Cons:Nil:S:0'
Lemmas:
prefix(gen_Cons:Nil:S:0'3_0(+(1, n28_0)), gen_Cons:Nil:S:0'3_0(+(1, n28_0))) → *4_0, rt ∈ Ω(n280)
Generator Equations:
gen_Cons:Nil:S:0'3_0(0) ⇔ Nil
gen_Cons:Nil:S:0'3_0(+(x, 1)) ⇔ Cons(Nil, gen_Cons:Nil:S:0'3_0(x))
The following defined symbols remain to be analysed:
eqNatList
(16) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol eqNatList.
(17) Obligation:
Innermost TRS:
Rules:
prefix(
Cons(
x',
xs'),
Cons(
x,
xs)) →
and(
!EQ(
x',
x),
prefix(
xs',
xs))
domatch(
Cons(
x,
xs),
Nil,
n) →
Nildomatch(
Nil,
Nil,
n) →
Cons(
n,
Nil)
prefix(
Cons(
x,
xs),
Nil) →
Falseprefix(
Nil,
cs) →
Truedomatch(
patcs,
Cons(
x,
xs),
n) →
domatch[Ite](
prefix(
patcs,
Cons(
x,
xs)),
patcs,
Cons(
x,
xs),
n)
eqNatList(
Cons(
x,
xs),
Cons(
y,
ys)) →
eqNatList[Ite](
!EQ(
x,
y),
ys,
xs)
eqNatList(
Cons(
x,
xs),
Nil) →
FalseeqNatList(
Nil,
Cons(
y,
ys)) →
FalseeqNatList(
Nil,
Nil) →
TruenotEmpty(
Cons(
x,
xs)) →
TruenotEmpty(
Nil) →
Falsestrmatch(
patstr,
str) →
domatch(
patstr,
str,
Nil)
and(
False,
False) →
Falseand(
True,
False) →
Falseand(
False,
True) →
Falseand(
True,
True) →
True!EQ(
S(
x),
S(
y)) →
!EQ(
x,
y)
!EQ(
0',
S(
y)) →
False!EQ(
S(
x),
0') →
False!EQ(
0',
0') →
Truedomatch[Ite](
False,
patcs,
Cons(
x,
xs),
n) →
domatch(
patcs,
xs,
Cons(
n,
Cons(
Nil,
Nil)))
domatch[Ite](
True,
patcs,
Cons(
x,
xs),
n) →
Cons(
n,
domatch(
patcs,
xs,
Cons(
n,
Cons(
Nil,
Nil))))
eqNatList[Ite](
False,
ys,
xs) →
FalseeqNatList[Ite](
True,
ys,
xs) →
eqNatList(
xs,
ys)
Types:
prefix :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
Cons :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
and :: False:True → False:True → False:True
!EQ :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
domatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
Nil :: Cons:Nil:S:0'
False :: False:True
True :: False:True
domatch[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
eqNatList :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
eqNatList[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
notEmpty :: Cons:Nil:S:0' → False:True
strmatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
S :: Cons:Nil:S:0' → Cons:Nil:S:0'
0' :: Cons:Nil:S:0'
hole_False:True1_0 :: False:True
hole_Cons:Nil:S:0'2_0 :: Cons:Nil:S:0'
gen_Cons:Nil:S:0'3_0 :: Nat → Cons:Nil:S:0'
Lemmas:
prefix(gen_Cons:Nil:S:0'3_0(+(1, n28_0)), gen_Cons:Nil:S:0'3_0(+(1, n28_0))) → *4_0, rt ∈ Ω(n280)
Generator Equations:
gen_Cons:Nil:S:0'3_0(0) ⇔ Nil
gen_Cons:Nil:S:0'3_0(+(x, 1)) ⇔ Cons(Nil, gen_Cons:Nil:S:0'3_0(x))
No more defined symbols left to analyse.
(18) LowerBoundsProof (EQUIVALENT transformation)
The lowerbound Ω(n1) was proven with the following lemma:
prefix(gen_Cons:Nil:S:0'3_0(+(1, n28_0)), gen_Cons:Nil:S:0'3_0(+(1, n28_0))) → *4_0, rt ∈ Ω(n280)
(19) BOUNDS(n^1, INF)
(20) Obligation:
Innermost TRS:
Rules:
prefix(
Cons(
x',
xs'),
Cons(
x,
xs)) →
and(
!EQ(
x',
x),
prefix(
xs',
xs))
domatch(
Cons(
x,
xs),
Nil,
n) →
Nildomatch(
Nil,
Nil,
n) →
Cons(
n,
Nil)
prefix(
Cons(
x,
xs),
Nil) →
Falseprefix(
Nil,
cs) →
Truedomatch(
patcs,
Cons(
x,
xs),
n) →
domatch[Ite](
prefix(
patcs,
Cons(
x,
xs)),
patcs,
Cons(
x,
xs),
n)
eqNatList(
Cons(
x,
xs),
Cons(
y,
ys)) →
eqNatList[Ite](
!EQ(
x,
y),
ys,
xs)
eqNatList(
Cons(
x,
xs),
Nil) →
FalseeqNatList(
Nil,
Cons(
y,
ys)) →
FalseeqNatList(
Nil,
Nil) →
TruenotEmpty(
Cons(
x,
xs)) →
TruenotEmpty(
Nil) →
Falsestrmatch(
patstr,
str) →
domatch(
patstr,
str,
Nil)
and(
False,
False) →
Falseand(
True,
False) →
Falseand(
False,
True) →
Falseand(
True,
True) →
True!EQ(
S(
x),
S(
y)) →
!EQ(
x,
y)
!EQ(
0',
S(
y)) →
False!EQ(
S(
x),
0') →
False!EQ(
0',
0') →
Truedomatch[Ite](
False,
patcs,
Cons(
x,
xs),
n) →
domatch(
patcs,
xs,
Cons(
n,
Cons(
Nil,
Nil)))
domatch[Ite](
True,
patcs,
Cons(
x,
xs),
n) →
Cons(
n,
domatch(
patcs,
xs,
Cons(
n,
Cons(
Nil,
Nil))))
eqNatList[Ite](
False,
ys,
xs) →
FalseeqNatList[Ite](
True,
ys,
xs) →
eqNatList(
xs,
ys)
Types:
prefix :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
Cons :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
and :: False:True → False:True → False:True
!EQ :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
domatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
Nil :: Cons:Nil:S:0'
False :: False:True
True :: False:True
domatch[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
eqNatList :: Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
eqNatList[Ite] :: False:True → Cons:Nil:S:0' → Cons:Nil:S:0' → False:True
notEmpty :: Cons:Nil:S:0' → False:True
strmatch :: Cons:Nil:S:0' → Cons:Nil:S:0' → Cons:Nil:S:0'
S :: Cons:Nil:S:0' → Cons:Nil:S:0'
0' :: Cons:Nil:S:0'
hole_False:True1_0 :: False:True
hole_Cons:Nil:S:0'2_0 :: Cons:Nil:S:0'
gen_Cons:Nil:S:0'3_0 :: Nat → Cons:Nil:S:0'
Lemmas:
prefix(gen_Cons:Nil:S:0'3_0(+(1, n28_0)), gen_Cons:Nil:S:0'3_0(+(1, n28_0))) → *4_0, rt ∈ Ω(n280)
Generator Equations:
gen_Cons:Nil:S:0'3_0(0) ⇔ Nil
gen_Cons:Nil:S:0'3_0(+(x, 1)) ⇔ Cons(Nil, gen_Cons:Nil:S:0'3_0(x))
No more defined symbols left to analyse.
(21) LowerBoundsProof (EQUIVALENT transformation)
The lowerbound Ω(n1) was proven with the following lemma:
prefix(gen_Cons:Nil:S:0'3_0(+(1, n28_0)), gen_Cons:Nil:S:0'3_0(+(1, n28_0))) → *4_0, rt ∈ Ω(n280)
(22) BOUNDS(n^1, INF)